// var twoSum = function (numbers, target) {
// 	let sortNum = numbers.slice().sort((a, b) => a - b) // [2,3,4]

// 	console.log('%c [ sortNum ]-4', 'font-size:13px; background:pink; color:#bf2c9f;', sortNum)
// 	console.log('numbers', numbers)
// 	let l = 0
// 	let r = sortNum.length - 1
// 	while (l < r) {
// 		let a = sortNum[l]
// 		let b = sortNum[r]

// 		const sum = a + b
// 		if (sum === target) {
// 			return [numbers.indexOf(a), numbers.lastIndexOf(b)]
// 		} else if (sum > target) {
// 			r--
// 		} else {
// 			l++
// 		}
// 	}
// }

// // console.log('twoSum([2,7,11,15],9)', twoSum([2, 7, 11, 15], 9))
// // console.log('twoSum([2,7,11,15],9)', twoSum([3, 2, 4], 6))
// console.log('twoSum([2,7,11,15],9)', twoSum([3, 3], 6))

// const twoSum = (arr, target) => {
// 	// 排序
// 	const sortNum = Array.from(arr).sort((a, b) => a - b)
// 	// 创建指针
// 	let left = 0
// 	let right = arr.length - 1
// 	// 对撞-》找到终止条件
// 	while (left < right) {
// 		const a = sortNum[left]
// 		const b = sortNum[right]
// 		const currentSum = a + b
// 		if (target === currentSum) {
// 			return [arr.indexOf(a), arr.indexOf(b)] // 用hash 表实现吧
// 		} else if (target < currentSum) {
// 			right--
// 		} else {
// 			left++
// 		}
// 	}
// }
const twoSum = (arr, target) => {
	// 排序
	const sortNum = Array.from(arr).sort((a, b) => a - b)
	// 创建指针
	let left = 0
	let right = arr.length - 1
	// 对撞-》找到终止条件
	while (left < right) {
		const a = sortNum[left]
		const b = sortNum[right]
		const currentSum = a + b
		if (target === currentSum) {
			return [left, right] // 用hash 表实现吧
		} else if (target < currentSum) {
			right--
		} else {
			left++
		}
	}
}

// console.log(twoSum([1, 4, 3, 12, 5], 9))
// console.log('twoSum([2,7,11,15],9)', twoSum([3, 2, 4], 6))
// console.log('twoSum([2,7,11,15],9)', twoSum([3, 3], 6))
// function twoSum(arr, target) {
// 	let map = new Map()
// 	for (let i = 0; i < arr.length; i++) {
// 		let subResult = target - arr[i]
// 		if (map.has(subResult)) {
// 			return [map.get(subResult), i]
// 		}
// 		map.set(arr[i], i)
// 	}
// 	return []
// }
// var twoSum = function (numbers, target) {
// 	let map = new Map()
// 	for (let i = 0; i < numbers.length; i++) {
// 		let subResult = target - numbers[i]
// 		if (map.has(subResult)) {
// 			return [map.get(subResult), i]
// 		}
// 		map.set(numbers[i], i)
// 	}
// 	return []
// }

// console.log('twoSum([2,7,11,15],9)', twoSum([2, 7, 11, 15], 9))
// console.log('twoSum([2,7,11,15],9)', twoSum([3, 2, 4], 6))
// console.log('twoSum([2,7,11,15],9)', twoSum([3, 3], 6))
// 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
// 示例:
// 输入: [0,1,0,3,12]
// 输出: [1,3,12,0,0]

// const moveZeroes = (arr) => {
// 	let l = 0
// 	let r = arr.length - 1
// 	while (l < r) {
// 		if (arr[l] === 0) {
// 			arr.splice(l, 1)
// 			arr.push(0)
// 			r--
// 		} else {
// 			l++
// 		}
// 	}
// 	return arr
// }
const moveZeroes = (arr) => {
	let left = 0

	for (let fast = 0; fast < arr.length; fast++) {
		if (arr[fast] !== 0) {
			;[arr[left], arr[fast]] = [arr[fast], arr[left]]
			left++
		}
	}
	return arr
}

console.log('%c [  ]-106', 'font-size:13px; background:pink; color:#bf2c9f;', moveZeroes([0, 1, 0, 3, 12]))
